home *** CD-ROM | disk | FTP | other *** search
- package javax.swing;
-
- class TimerQueue implements Runnable {
- private static final Object sharedInstanceKey = new StringBuffer("TimerQueue.sharedInstanceKey");
- private static final Object expiredTimersKey = new StringBuffer("TimerQueue.expiredTimersKey");
- Timer firstTimer;
- boolean running;
- private static final Object classLock = new Object();
-
- public TimerQueue() {
- this.start();
- }
-
- synchronized void addTimer(Timer var1, long var2) {
- if (!var1.running) {
- Timer var4 = null;
-
- Timer var5;
- for(var5 = this.firstTimer; var5 != null && var5.expirationTime <= var2; var5 = var5.nextTimer) {
- var4 = var5;
- }
-
- if (var4 == null) {
- this.firstTimer = var1;
- } else {
- var4.nextTimer = var1;
- }
-
- var1.expirationTime = var2;
- var1.nextTimer = var5;
- var1.running = true;
- this.notify();
- }
- }
-
- synchronized boolean containsTimer(Timer var1) {
- return var1.running;
- }
-
- synchronized long postExpiredTimers() {
- long var4;
- do {
- Timer var1 = this.firstTimer;
- if (var1 == null) {
- return 0L;
- }
-
- long var2 = System.currentTimeMillis();
- var4 = var1.expirationTime - var2;
- if (var4 <= 0L) {
- try {
- var1.post();
- } catch (SecurityException var7) {
- }
-
- this.removeTimer(var1);
- if (var1.isRepeats()) {
- this.addTimer(var1, var2 + (long)var1.getDelay());
- }
- }
-
- try {
- this.wait(1L);
- } catch (InterruptedException var6) {
- }
- } while(var4 <= 0L);
-
- return var4;
- }
-
- synchronized void removeTimer(Timer var1) {
- if (var1.running) {
- Timer var2 = null;
- Timer var3 = this.firstTimer;
-
- boolean var4;
- for(var4 = false; var3 != null; var3 = var3.nextTimer) {
- if (var3 == var1) {
- var4 = true;
- break;
- }
-
- var2 = var3;
- }
-
- if (var4) {
- if (var2 == null) {
- this.firstTimer = var1.nextTimer;
- } else {
- var2.nextTimer = var1.nextTimer;
- }
-
- var1.expirationTime = 0L;
- var1.nextTimer = null;
- var1.running = false;
- }
- }
- }
-
- public synchronized void run() {
- try {
- while(this.running) {
- long var1 = this.postExpiredTimers();
-
- try {
- this.wait(var1);
- } catch (InterruptedException var5) {
- }
- }
-
- } catch (ThreadDeath var6) {
- this.running = false;
-
- for(Timer var4 = this.firstTimer; var4 != null; var4 = var4.nextTimer) {
- var4.eventQueued = false;
- }
-
- SystemEventQueueUtilities.restartTimerQueueThread();
- throw var6;
- }
- }
-
- public static TimerQueue sharedInstance() {
- Object var1 = classLock;
- synchronized(var1){}
-
- TimerQueue var0;
- try {
- TimerQueue var3 = (TimerQueue)SwingUtilities.appContextGet(sharedInstanceKey);
- if (var3 == null) {
- var3 = new TimerQueue();
- SwingUtilities.appContextPut(sharedInstanceKey, var3);
- }
-
- var0 = var3;
- } catch (Throwable var5) {
- throw var5;
- }
-
- return var0;
- }
-
- synchronized void start() {
- if (this.running) {
- throw new RuntimeException("Can't start a TimerQueue that is already running");
- } else {
- Thread var1 = new Thread(this, "TimerQueue");
-
- try {
- var1.setDaemon(true);
- } catch (SecurityException var2) {
- }
-
- var1.start();
- this.running = true;
- }
- }
-
- synchronized void stop() {
- this.running = false;
- this.notify();
- }
-
- public synchronized String toString() {
- StringBuffer var1 = new StringBuffer();
- var1.append("TimerQueue (");
- Timer var2 = this.firstTimer;
-
- while(var2 != null) {
- var1.append(var2.toString());
- var2 = var2.nextTimer;
- if (var2 != null) {
- var1.append(", ");
- }
- }
-
- var1.append(")");
- return var1.toString();
- }
- }
-